# -*- coding: utf-8 -*-
""" Handler zum Eingeben von einzelnen Quizz-Aufgaben. """
# appengine imports
from google.appengine.ext import db

#python imports
import cgi, sys, hashlib
from datetime import datetime

#local imports
from baserequesthandler import BaseRequestHandler
from models import QAufgabe, Loesung
import words

# suchen
from whoosh import store
from whoosh.fields import Schema, STORED, ID, KEYWORD, TEXT
from whoosh.index import getdatastoreindex
from whoosh.qparser import QueryParser, MultifieldParser
import logging

SEARCHSCHEMA = Schema(frage=TEXT(stored=True), tipp=TEXT(stored=True), akey=ID(stored=True))

erlaubte_benutzer = {'orges': '123quizz321'}

class Handler(BaseRequestHandler):
  def _compute_akey(self, frage, antworten, loesungen, typ, tags):
    md5 = hashlib.md5()
    tuple = (str(frage), str(antworten), str(loesungen), str(typ), str(tags))
    md5.update('%s %s %s %s %s' % tuple)
    akey = md5.hexdigest()
    return akey

  def get(self):
    template_values = {
    }
    self.generate('quizz/eingabe.html', template_values)
    return

  def post(self):
    titel = cgi.escape(self.request.get('titel')).encode('utf-8')
    frage = cgi.escape(self.request.get('frage'))
    frage = frage.replace('\n','<br/>').encode('utf-8') 

    #self.response.out.write(frage)
    #return
    tipp = cgi.escape(self.request.get('tipp')).encode('utf-8')
    tipp = tipp.replace('\n','<br/>')
    tmp_sgrad = 0.1 # reicht fuer den Anfang. todo: wegmachen oder was besseres ueberlegen

    text = '%s %s %s' % (frage, titel, tipp)
    if self.is_spam(text) :
      self.redirect('/')
      return


    antworten = {}
    for b in 'ABCDEF':
      antwort = cgi.escape(self.request.get(b)).encode('utf-8')
      if antwort:
        antworten[b.lower()] = antwort

    loesungen = set(self.request.get_all('loesungen'))
    typ = cgi.escape(self.request.get('typ'))


    #benutzername = cgi.escape(self.request.get('benutzername'))
    #passwort = cgi.escape(self.request.get('passwort'))
    #if not erlaubte_benutzer[benutzername] == passwort:
    #  self.redirect('/')
    #  return

    text = '%s %s' % (frage, ' '.join(antworten.values()))
    ws = words.words(text) # ziehe alle woerter raus   
    tags = ws

    akey = self._compute_akey(frage, antworten, loesungen, typ, tags)

    # fuer suche indexieren:
    ix = getdatastoreindex("QAufgabe", schema=SEARCHSCHEMA)
    writer = ix.writer()
    writer.add_document(frage= frage.decode('utf-8'), akey=u"%s" % akey, tipp = tipp.decode('utf-8'))
    writer.commit()



    lsg_html = '.' #self.request.get('lsg_html') #todo: lsg_html ganz rausnehmen
    lsg_pdf = self.request.get('lsg_pdf')

    loesung = Loesung(akey = akey)
    if lsg_pdf:
      loesung.pdf = db.Blob(lsg_pdf)
    if lsg_html:
      loesung.html_tex = lsg_html
    loesung.put()
    

    ##########
    aufgabe = QAufgabe.gql('WHERE akey = :1', akey).get()
    if aufgabe is not None:
      self.response.out.write('aufgabe schon vorhanden.')
      return
    
    aufgabe = QAufgabe(akey=akey, frage=frage.decode('utf-8'), tmp_sgrad=tmp_sgrad, tags=tags, tipp=tipp.decode('utf-8'), typ=typ)
    aufgabe.titel = titel.decode('utf-8')
    aufgabe.put_antworten(antworten)
    aufgabe.put_loesungen(loesungen)
    aufgabe.init_bearbeitet()
    # bei der Eingabe erstmal nur zu sich selbst verlinken:
    aufgabe.links.append(akey)
    aufgabe.p.append(str(1.0))
    aufgabe.put()
    self.redirect('/quizz/aufgabe?akey=%s' % akey)
    return


     



